package util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;

import structures.xmltable.ServiceBaseTypeParameter;

public class ParameterList extends ArrayList<ServiceBaseTypeParameter> {
	private static final long serialVersionUID = -8301411457264051162L;
	
	HashMap<String, ServiceBaseTypeParameter> values;
	
	public ParameterList() {
		values = new HashMap<String, ServiceBaseTypeParameter>();
	}
	
	@Override
	public boolean add(ServiceBaseTypeParameter e) {
//		TODO
//		if(values.containsKey(e))
//			throw new IBException(e.getBagKey() + " anahtar tanimi mevcut !");
		values.put(e.getBagKey(), e);
		return super.add(e);
	}
	public boolean add(String bagKey, ServiceBaseTypeParameter e) {
		e.setBagKey(bagKey);
		values.put(bagKey, e);
		return super.add(e);
	}
	
	@Override
	public void add(int index, ServiceBaseTypeParameter element) {
		values.put(element.getBagKey(), element);
		super.add(index, element);
	}
	
	@Override
	public boolean addAll(Collection<? extends ServiceBaseTypeParameter> baseTypeParameters) {
		for (ServiceBaseTypeParameter baseTypeParameter : baseTypeParameters) {
			values.put(baseTypeParameter.getBagKey(), baseTypeParameter);
		}
		return super.addAll(baseTypeParameters);
	}
	
	@Override
	public boolean addAll(int index,
			Collection<? extends ServiceBaseTypeParameter> baseTypeParameters) {
		for (ServiceBaseTypeParameter baseTypeParameter : baseTypeParameters) {
			values.put(baseTypeParameter.getBagKey(), baseTypeParameter);
		}
		return super.addAll(index, baseTypeParameters);
	}
	
	@Override
	public ServiceBaseTypeParameter remove(int index) {
		ServiceBaseTypeParameter temp = get(index);
		values.remove(temp.getBagKey());
		return super.remove(index);
	}
	
	@Override
	public boolean remove(Object o) {
		ServiceBaseTypeParameter temp = (ServiceBaseTypeParameter) o;
		values.remove(temp.getBagKey());
		return super.remove(o);
	}
	
	@Override
	public boolean removeAll(Collection<?> paramObjList) {
		for (Object paramObj : paramObjList) {
			ServiceBaseTypeParameter temp = (ServiceBaseTypeParameter) paramObj;
			values.put(temp.getBagKey(), temp);
		}
		return super.removeAll(paramObjList);
	}
	
	@Override
	public void clear() {
		values.clear();
		super.clear();
	}
	
	@Override
	public ServiceBaseTypeParameter set(int index,
			ServiceBaseTypeParameter element) {
		values.put(element.getBagKey(), element);
		return super.set(index, element);
	}
	
	public ServiceBaseTypeParameter getByBagKey(String bagKey){
		return values.get(bagKey);
	}
}
